
import  QWebChannel from './qwebchannel.js'
//控制台输出
function consoleLog(data){
    console.log(data)
}

let QtClient = null;
// 初始化 qt 接口
let InitQtInterface = ()=> {
    let type = 'browser';//浏览器
    if (typeof qt === "undefined") {
        return type
    }

    type = 'exe'
    new QWebChannel.QWebChannel(qt.webChannelTransport,
        function (channel) {
            QtClient = channel.objects.QtClient;
            window.QtClient = QtClient;
            QtClient.OnConsoleLog.connect(consoleLog);// 控制台输出
        }
    );
    return type;
}


//我调用 客户端的
/*
* QtClient 放到了 vuex 里面
* 那个模块使用 那个模块调用
* 3. QtClient:null,
* 4.toRaw(state.QtClient).selectUpLoadCADFile('1111', '2222')
* */

//选择上传CAD文件，Vue上的“上传图纸”按钮，在客户端模式，调用本函数。
// 参数列表
// orgno:车站编码
// atlasid:图册id
const selectUpLoadCADFile = (data)=>{
    QtClient.selectUpLoadCADFile(data.orgno,data.atlasid)
}


//退出系统，客户端。 // 无参数
const receiveLogout = (data)=>{
    // QtClient.receiveLogout()
}

//获取图册列表。
// 参数列表
// orgno:车站编码
// values:图册列表
const receiveAtlasList = (data)=>{
    console.log(data)
    // QtClient.receiveAtlasList('111','222')

}

//获取图纸列表。
// 参数列表
// orgno:车站编码
// atlasid:图册ID
// values:图纸列表
const receiveCADFileList = (data)=>{
    console.log(data)
    // QtClient.receiveCADFileList('111','222')

}

//获取校核报告。
// 参数列表
// orgno:车站编码，
// data*:pdf字节流，可直接保存为文件
const receiveReport = (data)=>{
    console.log(data)
    // QtClient.receiveReport('111','222')

}

//文件传输事件，客户端接收。
// 参数列表
// filename:文件名
// position:进度位置
// MaxValue:进度最大值
// msg:进度消息
const receiveFileTransProgress = (filename, position, MaxValue, msg)=>{
    //filename:文件名  position:进度位置 MaxValue:进度最大值  msg:进度消息
    QtClient.receiveFileTransProgress(filename, position, MaxValue, msg)

}





/*
* 1.exe 发起文件上传  文件流给到 vue  v
* 2.vue接受 获取大小 发起后台上传
* 3.上传进度实时传输 exe 做回显
* */

// 获取文件大小。
// 参数列表
// filename:文件名
const getFileSize = (filename,dwgParams)=>{
    QtClient.getFileSize(filename,(res)=>{

        readFileData(dwgParams)
        // // * 1.如果文件大小  大于 1024 * 10000 / 2 = 5M  执行分割 1024 * 1000 = 1M
        // console.log('filesize:',res);
        // if(res > 1024 * 10000 * 0.5){//大于5M
        //     readFilePartData(dwgParams)
        // }else{//小于5M
        //     readFileData(dwgParams)
        // }

    });
}

// 读取文件内容。
// 参数列表
// filename:文件名
// filedata:字节数组
const readFileData = (data)=>{
    QtClient.readFileData(data.filename,(res)=>{
        window.cadUpload(res,data)//调用 vue 上传方法
    })
}
// 读取文件内容。
// 参数列表
// filename:文件名
// readfrom:从第几个字节开始
// readcount:读取字节数


let drawingSet = [];//图纸集合
const readFilePartData = (data)=>{
    //filename:文件名  position:进度位置 MaxValue:进度最大值  msg:进度消息
    drawingSet.push('');
    drawingDataSplicing(data.filename,0,1024 * 1000,(drawingSet.length - 1),data)
}
//数据做递归处理   图纸数据拼接   qwebchannel.js     coordinate：坐标（业务逻辑使用）
const drawingDataSplicing = async (filename,readfrom,readcount,coordinate,data)=>{
    console.log(filename,(readfrom + readcount),readcount)
    await QtClient.readFilePartData(filename,readfrom, readcount,function(res){
        console.log(res)
        if(!!res && res.length > 0){
            drawingSet[coordinate] = drawingSet[coordinate] + res;
            drawingDataSplicing(filename,(readfrom + readcount),readcount,coordinate,data)
        }else{
            window.cadUpload(drawingSet[coordinate],data)//调用 vue 上传方法
        }
    })
}


//Qt客户端提供开始校核接口
// orgno:车站编码
// atlaslist:图册列表，是一个json数组，包含选中的图册中的所有内容（web页面需要弹一个窗口，用来选择，哪些图册可以校核），然后调用QtClient.startProofread函数。
const startProofread = (orgno,atlaslist)=>{
    QtClient.startProofread(orgno,atlaslist)
}

// 读取文件内容。
// 参数列表
// fileid:文件名
// filedata:base64字节数组
const downFileData = (data)=>{
    // console.log(data)
    // return false;
    //data 全量数据
    QtClient.downFileData(data.drawid,data.caddata)
}



export default {
    InitQtInterface,// 初始化 qt 接口
    //我调用 客户端的
    selectUpLoadCADFile,//选择上传CAD文件，Vue上的“上传图纸”按钮，在客户端模式，调用本函数。
    receiveLogout,//退出系统，客户端。 // 无参数
    receiveAtlasList,//获取图册列表
    receiveCADFileList,//获取图纸列表
    receiveReport,//获取校核报告
    receiveFileTransProgress,//文件传输事件，客户端接收。
    getFileSize,//获取文件大小
    readFileData,//读取文件内容
    readFilePartData,//读取文件内容 多个
    startProofread,//Qt客户端提供开始校核接口
    downFileData,//给客户端传输图纸 base64
};
